﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.Mvc;

using ArmaTuCumpleModel.Model;
using ArmaTuCumpleModel.Repository;

namespace ArmaTuCumpleWeb.Controllers
{
    public class ServiciosActividadController : Controller
    {

        //Instanciación de repositorios
        RepServiciosActividad RepositorioServiciosActividad = new RepServiciosActividad();
        RepEventos RepositoriosActividad = new RepEventos();

        //
        // GET: /ServiciosActividad/
        
        public ActionResult Index()
        {
            return View();
        }

        //Retorna la vista de contratar servicio
        public ActionResult ContratarServicio(Guid id)
        {
            return View("ContratarServicio");
        }

        //Recoge los datos de contratar servicio
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult ContratarServicio(Guid id, Servicio_Usuario temp)
        {
            //Asigna los datos con lo recibido de la vista
            temp.id_servicio_usuario = Guid.NewGuid();
            temp.id_servicio = id;
            temp.confirmado = 0;
            temp.id_actividad = Guid.Parse(Request.Form["ctl00$MainContent$DropDownList1"]);
            
            //Agrega el servicio a la BD
            RepositorioServiciosActividad.AgregarServicioActividad(temp);
            //Guarda los datos
            RepositorioServiciosActividad.Guardar();
            //Redirige la accion
            return RedirectToAction("Index", "ServiciosUsuarios");
        }

        //Deja de requerir un servicio
        public ActionResult DesContratarServicio(Guid id)
        {
            //Se busca la actividad
            Servicio_Usuario serv = RepositorioServiciosActividad.ObtenerServicioActividadId(id);
            //Se eliminar de la BD
            RepositorioServiciosActividad.EliminarServicioActividad(serv);
            //Se guarda el movimiento
            RepositorioServiciosActividad.Guardar();
            //Se retorna una vista
            return RedirectToAction("Index", "ServiciosUsuarios");
        }

        //Entrega los Servicios que han requerido de un usuario
        public ActionResult ServiciosRequeridos()
        {
            //Vemos el id del usuario
            Guid user_id = (Guid)Membership.GetUser(User.Identity.Name).ProviderUserKey;
            //Recogemos del repositorio las actividades
            IQueryable<Servicio_Usuario> lista = RepositorioServiciosActividad.ObtenerServiciosActividadProximos(user_id);
            //Retornamos la vista y los servicio
            return View("ServiciosActividad",lista);
        }

        //Retorna los servicios realizados por un usuario
        public ActionResult ServiciosRealizados()
        {
            //Vemos el id del usuario
            Guid user_id = (Guid)Membership.GetUser(User.Identity.Name).ProviderUserKey;
            //Buscamos los datos en el repositorio
            IQueryable<Servicio_Usuario> lista = RepositorioServiciosActividad.ObtenerServiciosActividadPasados(user_id);
            //Retornamos la vista y los servicios
            return View("ServiciosActividad", lista);
        }

        //Confirma la realizacion de un servicio
        public ActionResult ConfirmarServicioActividad(Guid id)
        {
            //Buscamos el servicio
            Servicio_Usuario act = RepositorioServiciosActividad.ObtenerServicioActividadId(id);
            //Lo confirmamos
            act.confirmado = 1;
            //Guardamos el servicio
            RepositorioServiciosActividad.Guardar();

            //Revisamos si todas estan confirmadas
            RepositoriosActividad.ConfirmarActividad(act.Actividad.id_actividad);
            //Retornamos una vista
            return RedirectToAction("ServiciosRequeridos");
        }

        //Metodo que descarta un servicio
        public ActionResult DescartarServicioActividad(Guid id)
        {
            //Como descartamos, vamos a asumir que se borra el servicio!!!!
            //Se repite la accion de borrar un servicio
            Servicio_Usuario serv = RepositorioServiciosActividad.ObtenerServicioActividadId(id);
            RepositorioServiciosActividad.EliminarServicioActividad(serv);
            RepositorioServiciosActividad.Guardar();
            return RedirectToAction("ServiciosRequeridos");
        }
        
        //Metodo que devuelve todos los Servicio Actividad para poder Administrarlos
        public ActionResult AdminServiciosActividad()
        {
            IQueryable<Servicio> Lista = RepositorioServiciosActividad.ObtenerServicios();
            return View("AdminServiciosActividad",Lista);
        }

        public ActionResult EliminarServicioActividad(Guid id)
        {
            Servicio serv = RepositorioServiciosActividad.GetServiciobyId(id);
            RepositorioServiciosActividad.EliminarServicio(serv);
            RepositorioServiciosActividad.Guardar();
            return (AdminServiciosActividad());
        }

    }
}
